package com.matt.service.impl;


import com.matt.commons.exception.BusinessException;
import com.matt.domain.course.CourseType;
import com.matt.foundation.constant.CourseConstant;
import com.matt.foundation.utils.CopyUtils;
import com.matt.foundation.vo.course.CourseTypeAddVo;
import com.matt.repository.course.CourseTypeRepository;
import com.matt.service.CourseTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Objects;

import static com.matt.foundation.model.ErrorCode.AREA_BUILD_COURSE_TYPE_DUPLICATE;

@Service
public class CourseTypeServiceImpl implements CourseTypeService{

	@Autowired
	private CourseTypeRepository courseTypeRepository;
	//查询课程
	@Override
	public List<CourseType> findByAreaIdAndTypeAndStatus(String areaId, int type, int status) {
		// TODO Auto-generated method stub
		return courseTypeRepository.findByAreaIdAndTemplateTypeAndStatus(areaId, type, status);
	}
    //新增课程类型
	@Override
	public CourseType create(String areaId,CourseTypeAddVo courseTypeAddVo) {

		CourseType oldCourseType = courseTypeRepository.findByAreaIdAndTypeNameAndStatus(areaId, courseTypeAddVo.getTypeName(),CourseConstant.CourseOfficialStatus.ACTIVE.codeOf());
		if(Objects.nonNull(oldCourseType)){
			throw new BusinessException(AREA_BUILD_COURSE_TYPE_DUPLICATE, "自建课程类型名称重复");
		}

        CourseType courseType = new CourseType();

		CopyUtils.copyProperties(courseTypeAddVo, courseType);

		courseType.setType(2);
		courseType.setId(null);
		courseType.setDeleted(false);
		courseType.setCreated(new Date());

//		Integer typeCode = courseTypeRepository.findMaxTypeCode();
//		courseType.setTypeCode(typeCode);

		return courseTypeRepository.save(courseType);
	}
	@Override
	public CourseType findByCourseTypeId(String id) {
		return courseTypeRepository.getOne(id);
	}
	@Override
	public boolean delete(String id) {
		// TODO Auto-generated method stub
		 courseTypeRepository.deleteById(id);
		return true;
	}
	@Override
	public CourseType update(String areaId, CourseTypeAddVo courseTypeAddVo) {
		// TODO Auto-generated method stub
		CourseType courseType=courseTypeRepository.getOne(courseTypeAddVo.getId());
		courseType.setStatus(courseTypeAddVo.getStatus());
		courseType.setTypeName(courseTypeAddVo.getTypeName());
		courseType=courseTypeRepository.save(courseType);
		return courseType;
	}

}
